package com.wmx.mp.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wmx.mp.entity.BasAgency;
import com.wmx.mp.mapper.BasAgencyMapper;
import com.wmx.mp.service.IBasAgencyService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 单位信息服务实现类
 * 1、继承通用 CRUD 接口实现 {@link ServiceImpl} 即可获得丰富的 API。
 *
 * @author 汪茂雄
 * @since 2023-03-05
 */
@Service
public class BasAgencyServiceImpl extends ServiceImpl<BasAgencyMapper, BasAgency> implements IBasAgencyService {

    @Resource
    private BasAgencyMapper basAgencyMapper;

    /**
     * 模糊查询信息
     *
     * @param keyword ：关键字模糊查询。
     * @return
     */
    @Override
    public List<BasAgency> findAllList(String keyword) {
        // 查询条件构造器
        QueryWrapper<BasAgency> queryWrapper = new QueryWrapper<>();
        if (StringUtils.isNotBlank(keyword)) {
            // 查询的列名是数据库表的列名，而不是实体对象的属性名。
            queryWrapper.like("agency_code", keyword.trim())
                    .or().like("agency_name", keyword.trim())
                    .or().like("loc", keyword.trim());
        }
        // 查询列表
        return list(queryWrapper);
    }

    /**
     * 分页查询
     *
     * @param page  ：当前页码，从1开始
     * @param count ：每页展示的条数
     * @return
     */
    @Override
    public IPage<BasAgency> pageList(Integer page, Integer count) {
        Page<BasAgency> basAgencyPage = page(PageDTO.of(page, count));
        return basAgencyPage;
    }

    /**
     * 批量新增保存: boolean saveBatch(Collection<T> entityList)。
     * 返回是否成功。
     * 可以直接从新增后的实体中获取自动填充的主键，而不用再额外的配置。
     *
     * @param basAgencyList ：待新增保存的数据
     */
    @Override
    public void saveList(List<BasAgency> basAgencyList) {
        // 插入（批量）,默认批次提交数量为 1000.
        // ==> Preparing: INSERT INTO BAS_AGENCY ( AGENCY_ID, AGENCY_CODE, AGENCY_NAME, LOC, LAST_YEAR_EXPENDITURE, CREATE_TIME, UPDATE_TIME, IS_DELETE ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )
        // ==> Parameters: 1647030120482930690(Long), 001007(String), 江东省邮政局(String), 江东市007号(String), 2.367888719E7(Double), 2023-04-15 08:12:35.702(Timestamp), 2023-04-15 08:12:35.702(Timestamp), 2(Integer)
        // ==> Parameters: 1647030120482930691(Long), 001008(String), 江东省工商局(String), 江东市008号(String), 4.367788739E7(Double), 2023-04-15 08:12:35.702(Timestamp), 2023-04-15 08:12:35.702(Timestamp), 2(Integer)
        // true
        boolean isSuccess = saveBatch(basAgencyList);
        System.out.println(isSuccess);
        // 1647030120482930690
        // 1647030120482930691
        basAgencyList.stream().forEach(item -> System.out.println(item.getAgencyId()));
    }

    /**
     * 批量更新保存
     *
     * @param basAgencyList ：待更新保存的数据
     */
    @Override
    public void updateList(List<BasAgency> basAgencyList) {
        // 根据ID 批量更新,默认批次提交数量为 1000.
        updateBatchById(basAgencyList);
    }

    /**
     * 批量删除。
     * 开启逻辑删除时，自动逻辑删除。
     *
     * @param basAgencyList ：待删除的数据
     */
    @Override
    public void deleteList(List<BasAgency> basAgencyList) {
        // 批量删除(jdbc批量提交)
        // @param list 主键ID或实体列表(主键ID类型必须与实体类型字段保持一致)

        // ==> Preparing: UPDATE BAS_AGENCY SET IS_DELETE=1 WHERE AGENCY_ID=? AND IS_DELETE=2
        // ==> Parameters: 1(Long)
        // ==> Parameters: 2(Long)
        removeBatchByIds(basAgencyList);
    }
}
